import { ENV } from '.env.js'

// 请求拦截器
uni.addInterceptor('request', {
  invoke(args) {
		if(args.url.indexOf('https://') === -1 && args.url.indexOf('http://') === -1) {
			args.url = ENV.BASE_API + args.url
		}
  },
  success(args) {
    // console.log('success', args)
  },
  fail(err) {
    // console.log('interceptor-fail',err)
  },
  complete(res) {
    // console.log('interceptor-complete',res)
  }
})

// 请求函数
function request(config) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: config.url,
      data: config.data || {},
      header: {
        [ENV.HEAD]: uni.getStorageSync('token') || '',
        'content-type': config.contentType || 'application/json;charset=utf-8',
        ...config.header,
      },
      method: config.method || 'POST',
      dataType: config.dataType || 'JSON',
      success: async (res) => {
        // #ifdef APP-PLUS || H5
        var data = res.data
        // #endif
        // #ifdef MP-WEIXIN
        var data = JSON.parse((res.data))
        // #endif
        if(data.code && data.code != 200 && data.code != 230){
          uni.hideLoading()
          if(data.code == 401) {
            uni.removeStorageSync('token')
            uni.removeStorageSync('userInfo')
            uni.removeStorageSync('permissions')
            uni.removeStorageSync('enterpriseInfo')
            uni.showToast({
              icon: 'none',
              title: '登录超时，请重新登录',
              success: () => {
                setTimeout(() => {
                  uni.reLaunch({
                    url: '/pages/index/isLoginIndex'
                  })
                }, 800)
              }
            })
          } else if(data.code == 444) {
            uni.showModal({
              title: '提示',
              content: data.msg,
              confirmText: '立即注册',
              success: function (res) {
                if (res.confirm) {
                  wx.navigateToMiniProgram({
                    appId: ENV.BASE_APPID,
                    path: data.data.mini, // 跳转的页面路径，可选，默认跳转到目标小程序首页; 签署时，需使用后台API返回的完整链接（类似pages/guide?id=xxx&foo=bar）
                    envVersion: 'release', // 跳转正式或demo小程序，都需要传 'release'
                    success(res) {
                    },
                    fail(err) {
                      // 跳转失败的回调函数
                      console.log(err);
                      uni.showToast({
                        icon: 'none',
                        title: '跳转三方小程序失败',
                      })
                    }
                  })
                } else if (res.cancel) {
                  uni.navigateBack({
                    delta: 1
                  });
                }
              }
            });
          } else {
            if(!data.msg) {
              data.msg = '系统内部错误，请联系管理员'
            }
            uni.showToast({
              icon: 'none',
              title: data.msg,
            })
          }
          setTimeout(() => {
            reject()
          }, 1000)
          return
        }
        resolve(data)
      },
      fail: (err) => {
        uni.showToast({
          icon: 'none',
          title: '接口请求失败'
        })
        uni.hideLoading()
        reject(err)
      },
      complete: (res) => {
        try {
          config.complete(res)
        } catch (e) {
          // TODO handle the exception
        }
      }
    })
  })
}

export default request
